Remembering Ken Iverson Acknowledgments I am indebted to Chris Burke, Eric Iverson, Eugene McDonnell, 0. Beginnings I first met Ken Iverson early in 1981 in Toronto, when he invited me So now not only was I to meet the great Ken Iverson, We then went for dinner at a restaurant on King Street. In another sense, I had “met” Ken Iverson years before, 1. From APL to J The late 70’s and early 80’s were an exciting time for APL. Ken had published his seminal paper Operators and Functions At that time, the main APL vendors were IBM, STSC, I.P. Sharp implemented the new APL ideas in stages, An important stepping stone from APL to J was SAX SAX implemented dictionary APL in part, From a personal perspective, Arthur Whitney, from collaborating with Ken on In the wider world, the PC revolution was in full swing. The conditions were ripe for … 2. J The story of how J began has been told in detail by Donald McIntyre
It’s funny, but my recollection is that at the time The final impetus that got J started was the
The name “J” was chosen a few minutes later, I consciously designed and built the system Years after the initial implementation, I happened to re-read Ken and I had in mind to implement
Moreover, (f g p q r) ↔ (f g (p q r)) . The choice to implement forks was fortuitous and fortunate. Because explicit definition Meanwhile, Ken was concerned about the usefulness Eric Iverson founded Iverson Software Inc. in February 1990 Eric adapted the session manager from SHARP APL/PC Work proceeded rapidly from August 1989. The first public presentation In working with Ken, I soon realized that Example 0: For the first few months, Example 1: It came time to implement (“scan”).
Much recent work involved “recognizing” phrases
are supported by special code. 'boustrophedonic' (e.i.1:) 'aeiou' NB. index of first vowel 1 'boustrophedonic' (e.i:1:) 'aeiou' NB. index of last vowel 13 If the target is found near the beginning of the search, Another recent development is a port to Ken had started to write a companion to the (+%)/ 10 $ 1 1 2 1.5 1.66667 1.6 1.625 1.61538 1.61905 1.61765 1.61818 (+%)/ 10 $ 1x 1 2 3r2 5r3 8r5 13r8 21r13 34r21 55r34 89r55 0j40 ": (+%)/ 100 $ 1x 1.6180339887498948482045868343656381177203 The hook x(+%)y is x plus the reciprocal 3. Remembering Ken Ken and I worked on J in our homes in Toronto, It is said that if you keep playing chess with a Credit. When Ken was at Harvard a fellow student Blame. Ken and I sometimes kidded each other In truth, I am profoundly grateful to Ken for not complaining Secret to Success. In January 1992, (Ken subsequently gave me some more immediately Reading and Writing Carefully. I later realized that Ken wrote carefully, Words. As others have recounted, Many of Ken’s relatives and friends received I think nothing I had ever done impressed Ken quite as much as Books. Before long, Ken and I discovered I to Ken: The Language Instinct And, of course, both of us had read The Book of J Politics. Unsurprisingly, Ken stood up for what he believed in. Respect for People. Ken liked to tell Ken also suggested, “Be kind to someone trying to make A Questioning and Flexible Mind. References
Appendix A. Incunabulum From An Implementation of J One summer weekend in 1989, Arthur Whitney visited Ken Iverson at Arthur’s one-page interpreter fragment is as follows: typedef char C;typedef long I; typedef struct a{I t,r,d[3],p[2];}*A; #define P printf #define R return #define V1(f) A f(w)A w; #define V2(f) A f(a,w)A a,w; #define DO(n,x) {I i=0,_n=(n);for(;i<_n;++i){x;}} I *ma(n){R(I*)malloc(n*4);}mv(d,s,n)I *d,*s;{DO(n,d[i]=s[i]);} tr(r,d)I *d;{I z=1;DO(r,z=z*d[i]);R z;} A ga(t,r,d)I *d;{A z=(A)ma(5+tr(r,d));z->t=t,z->r=r,mv(z->d,d,r); R z;} V1(iota){I n=*w->p;A z=ga(0,1,&n;);DO(n,z->p[i]=i);R z;} V2(plus){I r=w->r,*d=w->d,n=tr(r,d);A z=ga(0,r,d); DO(n,z->p[i]=a->p[i]+w->p[i]);R z;} V2(from){I r=w->r-1,*d=w->d+1,n=tr(r,d); A z=ga(w->t,r,d);mv(z->p,w->p+(n**a->p),n);R z;} V1(box){A z=ga(1,0,0);*z->p=(I)w;R z;} V2(cat){I an=tr(a->r,a->d),wn=tr(w->r,w->d),n=an+wn; A z=ga(w->t,1,&n;);mv(z->p,a->p,an);mv(z->p+an,w->p,wn);R z;} V2(find){} V2(rsh){I r=a->r?*a->d:1,n=tr(r,a->p),wn=tr(w->r,w->d); A z=ga(w->t,r,a->p);mv(z->p,w->p,wn=n>wn?wn:n); if(n-=wn)mv(z->p+wn,z->p,n);R z;} V1(sha){A z=ga(0,1,&w-;>r);mv(z->p,w->d,w->r);R z;} V1(id){R w;}V1(size){A z=ga(0,0,0);*z->p=w->r?*w->d:1;R z;} pi(i){P("%d ",i);}nl(){P("n");} pr(w)A w;{I r=w->r,*d=w->d,n=tr(r,d);DO(r,pi(d[i]));nl(); if(w->t)DO(n,P("< ");pr(w->p[i]))else DO(n,pi(w->p[i]));nl();} C vt[]="+{~<#,"; A(*vd[])()={0,plus,from,find,0,rsh,cat}, (*vm[])()={0,id,size,iota,box,sha,0}; I st[26]; qp(a){R a>='a'&&a;<='z';}qv(a){R a<'a';} A ex(e)I *e;{I a=*e; if(qp(a)){if(e[1]=='=')R st[a-'a']=ex(e+2);a= st[ a-'a'];} R qv(a)?(*vm[a])(ex(e+1)):e[1]?(*vd[e[1]])(a,ex(e+2)):(A)a;} noun(c){A z;if(c<'0'||c>'9')R 0;z=ga(0,0,0);*z->p=c-'0';R z;} verb(c){I i=0;for(;vt[i];)if(vt[i++]==c)R i;R 0;} I *wd(s)C *s;{I a,n=strlen(s),*e=ma(n+1);C c; DO(n,e[i]=(a=noun(c=s[i]))?a:(a=verb(c))?a:c);e[n]=0;R e;} main(){C s[99];while(gets(s))pr(ex(wd(s)));} Appendix B. J Words Used in the Text Full reference in J Introduction and Dictionary
|
The last photograph of Ken Iverson, with Rachel Hui, Jean Iverson, and Nicholas Hui, on Sunday, 2004-09-05, at the roof-top garden of the Manulife Center, Toronto, Canada. [photo by Stella Hui] |